package be.xios.projectquiz.database;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;

/// <summary>
/// Deze klasse zorgt ervoor dat er een backup genomen kan worden.
/// </summary>
/// <author>Flemming Bosch</author>
public class Backup {
    private Connection con;
    private int BUFFER = 9999999;
     
  /// <summary>
  /// Deze method maakt connectie met de database en ontvang alle data van de database waarvan een backup gemaakt moet worden
  /// </summary>
  /// <parameter name="host">Dit is het ip van de DB server</parameter>
  /// <parameter name="port">Dit is de poort van de DB server</parameter>
  /// <parameter name="user">Dit is de inlognaam om in te loggen op de DB</parameter>
  /// <parameter name="db">Dit is de database waar de data uit de DB moet gehaald worden</parameter>
  /// <return>string met alle data die backupped moet worden.</return>
  /// <author>Flemming Bosch</author>
    public String getData(String host, String port, String user, String password,String db) {
    	try {
    		Class.forName("com.mysql.jdbc.Driver");
        	String DBURL = "jdbc:mysql://"+host+":"+port+"/";
            con = DriverManager.getConnection(DBURL, user, password);
            con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
        }
        catch (Exception e) {
            e.printStackTrace();
        }
        
        Process run = null;
        try {
            run = Runtime.getRuntime().exec("resources\\mysqldump --host=" + host + " --port=" + port + " --user=" + user + " --password=" + password + " --skip-quote-names "  + db);     
        }
        catch (IOException ex) {}
        
        InputStream in = run.getInputStream();
        BufferedReader br = new BufferedReader(new InputStreamReader(in));
        StringBuffer temp = new StringBuffer();

        int count;
        char[] cbuf = new char[BUFFER];

        try {
        	while ((count = br.read(cbuf, 0, BUFFER)) != -1) {
        		temp.append(cbuf, 0, count);
            }
        	
        	br.close();
            in.close();
        } 
        catch (IOException ex) {}
        
        //Inhoud van de database returnen als een String.
        return temp.toString();
    }
}